/*
 * INodo.cpp
 *
 *  Created on: 03/04/2010
 *      Author: administrador
 */

#include "INodo.h"
#include "Arbol.h"

int INodo::factorCargaOverflow = 0;
int INodo::factorCargaUnderflow = 0;

/*
 * Este constructor se llama cuando el Nodo no existe.
 * Se le debe asignar un id de nodo libre.
 */
INodo::INodo(char tipo)
{
	if (tipo == Raiz)
	{
		this -> id = 0;
	}
	else
	{
		this->id = -1;
		// TODO: Buscar en el archivo de claves libres la clave que lo va a identificar
		// this -> id = (lo que encuentre)
	}

	this->tamanioActual = getTamanioElementosControlNodo();
}

/*
 * Este constructor se llama cuando el Nodo existe y esta en disco.
 */
INodo::INodo(int idNodo, char tipo)
{
	this -> id = idNodo;

	this->tamanioActual = getTamanioElementosControlNodo();
	// TODO: Buscar en disco el nodo con idNodo y traerlo a memoria
}

INodo::~INodo()
{
	// TODO Auto-generated destructor stub
}

int INodo::getId()
{
	return this -> id;
}

int INodo::getNivel()
{
	return this -> nivel;
}

int INodo::getCantidadElementos()
{
	return this -> cantidadElementos;
}

int INodo::getTamanioActual()
{
	return this -> tamanioActual;
}


void INodo::setTamanioActual(int tamanio)
{
	this -> tamanioActual = tamanio;
}

void INodo::setTamanioNodo(int tamanio){

	factorCargaOverflow = tamanio* Arbol::porcentajeOverflow;
	factorCargaUnderflow = tamanio * Arbol::porcentajeUnderflow;
}

int INodo::getTamanioElementosControlNodo(){

	return sizeof(this->nivel) + sizeof(this->cantidadElementos) + sizeof(this->id) + sizeof(this->tamanioActual);
}

void INodo::setId(int idNodo){

	this->id = idNodo;
}

